package initConfig

import (
	"fmt"
	"github.com/spf13/viper"
	"os"
	"path/filepath"
)

var appConfig AppConfig

// InitLoad 加载配置文件并解析到结构体
func InitLoad() (*AppConfig, error) {
	// 获取当前可执行文件所在目录
	exePath, err := os.Executable()
	if err != nil {
		return nil, fmt.Errorf("获取可执行文件路径失败: %w", err)
	}
	exeDir := filepath.Dir(exePath)

	// 设置配置文件路径为相对于 exe 目录的上一级目录下的 conf 目录
	configPath := filepath.Join(filepath.Dir(exeDir), "conf")

	viper.SetConfigName("config") // 配置文件名
	viper.SetConfigType("yaml")   // 配置文件类型
	viper.AddConfigPath(configPath)

	// 读取配置文件
	err = viper.ReadInConfig()
	if err != nil {
		return nil, fmt.Errorf("读取配置文件失败: %w", err)
	}

	// 解析配置到结构体
	err = viper.Unmarshal(&appConfig)
	if err != nil {
		return nil, fmt.Errorf("解析配置失败: %w", err)
	}

	return &appConfig, nil
}

func GetAppConfig() *AppConfig {
	return &appConfig
}
